//
// Created by 32827 on 2024/7/8.
//
#include "yz_tim.h"
YZF_RESULT yz_tim_pwm_init(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin,uint16_t  ch_af,YZF_TIM_POINTER tim,uint16_t ch_id,uint32_t arr,uint32_t psc,uint32_t ccr){
    YGPIO(gpio)
    YPIN(pin)
    yzf_gpio_open_clock_();
    yzf_gpio_set_AFPP_();
    yzf_gpio_set_af_(ch_af);

    yzf_tim_open_clock(tim);
    yzf_tim_out_compare_mode_set(tim,ch_id,0b110);
    yzf_tim_set_prescaler(tim,psc);
    yzf_tim_capture_compare_data_set(tim,ch_id,ccr);
    yzf_tim_capture_compare_enable(tim,ch_id,YZF_TRUE);
    yzf_tim_set_auto_reload_number(tim,arr);
    yzf_tim_auto_reload_enable(tim);

    return YZF_OK;
}
YZF_RESULT yz_tim_pwm_data_set(YZF_TIM_POINTER tim,uint16_t ch_id,uint32_t ccr,uint32_t arr){
    yzf_tim_disable(tim);
    __asm__("nop");
    __asm__("nop");
    __asm__("nop");
    yzf_tim_set_auto_reload_number(tim,arr);
    yzf_tim_capture_compare_data_set(tim,ch_id,ccr);
    yzf_tim_enable(tim);
    return YZF_OK;
}
YZF_RESULT yz_tim_pwm_deInit(YZF_TIM_POINTER tim,uint16_t ch_id){
    yzf_tim_disable(tim);
    __asm__("nop");
    __asm__("nop");
    __asm__("nop");
    yzf_tim_capture_compare_enable(tim,ch_id,YZF_FALSE);
    __asm__("nop");
    __asm__("nop");
    __asm__("nop");
    yzf_tim_out_compare_mode_set(tim,ch_id,0b000);
    yzf_tim_enable(tim);
    return YZF_OK;
}